home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / sml_nj / 93src.lha / src / build / boot.sml < prev    next >
Encoding:
Text File  |  1993-01-27  |  3.2 KB  |  85 lines

  1. (* Copyright 1992 by AT&T Bell Laboratories *)
  2.  
  3. signature BOOTENV =
  4. sig
  5.   val bootEnv : (Environment.staticEnv -> string -> Environment.staticEnv)
  6.                  -> Environment.staticEnv * (int * int * int)
  7.   val makePervEnv : unit -> Environment.environment
  8. end
  9.  
  10. structure BootEnv: BOOTENV =
  11. struct
  12.  
  13.   open ErrorMsg Modules ModuleUtil Access
  14.  
  15.   fun load env fname = (app System.Print.say ["[Loading ", fname, "]\n"]; 
  16.                         ProcessFile.process(env,fname,NONE))
  17.  
  18.  (* initializing static environment *)
  19.  
  20.   fun bootEnv (loader: Environment.staticEnv -> string 
  21.                        -> Environment.staticEnv) =
  22.       let val err = fn _ => impossible "bootEnv"
  23.       val sigSymbols =
  24.          map Symbol.sigSymbol ["REF","LIST","ARRAY","BYTEARRAY","IO",
  25.                                    "BOOL","STRING","INTEGER","REAL",
  26.                    "VECTOR","GENERAL"]
  27.       val NJsymbol = Symbol.strSymbol "NewJersey"
  28.       val signatures = !System.Print.signatures
  29.       val _ = System.Print.signatures := 0
  30.       val _ = CoreInfo.resetCore();
  31.           val env = {static=Prim.primEnv,inverse=InverseEnv.empty}
  32.       val env = load env "boot/assembly.sig"
  33.       val env = loader env "boot/core.sml"
  34.       val env = load env "boot/dummy.sml"
  35.       val markabs = !System.Control.markabsyn
  36.              before System.Control.markabsyn := false
  37.       val svCore as STRvar{access=Access.PATH[lvCore],...} =
  38.         lookSTR(#static(env),[Symbol.strSymbol "Core"],err)
  39.       val _ = CoreInfo.setCore(#static(env),[Symbol.strSymbol "Core"])
  40.       val env = load env "boot/perv.sig"
  41.       val env = load env "boot/system.sig"
  42.       val env = loader env "boot/math.sml"
  43.       val env = loader env "boot/perv.sml"
  44.       val env = load env "boot/overloads.sml"
  45.       val _ = (System.Print.signatures := signatures)
  46.       val _ = (System.Control.markabsyn := markabs)
  47.       val mathSymb = Symbol.strSymbol "Math" and
  48.           initSymb = Symbol.strSymbol "Initial" and
  49.           ovldSymb = Symbol.strSymbol "Overloads"
  50.           val senv = #static(env)
  51.       val STRvar{access=Access.PATH[lvMath],...} =
  52.                lookSTR (senv,[mathSymb],err)
  53.       and svInitial as STRvar{access=PATH[lvInitial],
  54.                    binding=strInitial,...} =
  55.                lookSTR (senv,[initSymb],err)
  56.       and overLoads = lookSTR (senv,[ovldSymb],err)
  57.       val senv' = openStructureVar 
  58.             (openStructureVar(Prim.fixOpEnv,svInitial), overLoads)
  59.       val senv' = fold (fn (name,e) => 
  60.                                Env.bind(name,Env.look(senv,name),e))
  61.                sigSymbols senv'
  62.       val senv' = Env.bind
  63.               (NJsymbol, 
  64.                STRbind(STRvar{name=NJsymbol,access=PATH[lvInitial],
  65.                       binding=strInitial}),
  66.                senv')
  67.           val env' = Environment.makeStaticEnv(senv')
  68.       in (env',(lvCore,lvInitial,lvMath))
  69.       end
  70.  
  71.   fun makePervEnv () =
  72.       let val ({static=pervStatEnv,inverse=pervInvEnv},(vCore,vInitial,vMath))
  73.                  = bootEnv load
  74.           (* bind runtime boot structures, Core, Math, and Initial, 
  75.              in pervDynEnv *)
  76.       val {core,math,initial} = !System.Unsafe.pstruct
  77.       val pervDynEnv = DynamicEnv.bind(vCore,core,
  78.                  DynamicEnv.bind(vInitial,initial,
  79.                    DynamicEnv.bind(vMath,math,
  80.                  DynamicEnv.empty)))
  81.        in {static=pervStatEnv, dynamic=pervDynEnv, inverse=pervInvEnv}
  82.       end
  83.  
  84. end (* structure BootEnv *)
  85.